PVE intel直通核显 踩坑记录

目前仅有 Intel 11 (Tigerlake) / 12 / 13 / 14 代带核显 CPU 支持 SRIOV 核显虚拟化,非此类 CPU 不能 SRIOV 虚拟化。

image-20241015185513692

为了达到在PVE虚拟机下可以使用PVE宿主机的核显来进行视频转码的目的,目前有一个可以使用并且在不同的Linux内核下通用的方法。

准备步骤

记得在PVE的控制面板的PCI设备不要选宿主机核显选项,不然重启之后会报错。

image-20241015185749698

uname -a

根据 uname -a 反馈信息调整 header 的版本信息

apt update  
apt upgrade  
apt update  
​  
apt install -y git build-* dkms # 必要编译工具安装  
apt install pve-headers-$(uname -r)

apt install pve-kernel-6.8.12-2-pve  
proxmox-boot-tool kernel pin 6.8.12-2-pve  
apt install pve-headers-6.8.12-2-pve

注:6.8.12-2 为示例,根据自己的替换

proxmox-boot-tool kernel list

查看是否生效

reboot

重启生效

拉取核显虚拟化驱动项目的源码

cd ~  
git clone https://github.com/strongtz/i915-sriov-dkms.git  
cd ~/i915-sriov-dkms  
cp -a ~/i915-sriov-dkms/dkms.conf{,.bak}  
sed -i 's/"@_PKGBASE@"/"i915-sriov-dkms"/g' ~/i915-sriov-dkms/dkms.conf  
sed -i 's/"@PKGVER@"/"'"$KERNEL"'"/g' ~/i915-sriov-dkms/dkms.conf  
 sed -i 's/ -j$(nproc)//g' ~/i915-sriov-dkms/dkms.conf  
cat ~/i915-sriov-dkms/dkms.conf

如果 cat ~/i915-sriov-dkms/dkms.conf 这一步发现里面的 package_version 不对,手动改成内核版本号,如 6.8.12-2

DKMS 添加驱动源码管理并安装部署

链接内核源代码,并检查状态。确认内核显示已添加。

cp -r ~/i915-sriov-dkms /usr/src/i915-sriov-dkms-$KERNEL  
ls /usr/src # 查看

cd /usr/src/i915-sriov-dkms-$KERNEL  
dkms add .  
dkms status

构建新内核并检查状态。验证是否显示已安装。这里是 2 核编译,可以自定义。

dkms install -m i915-sriov-dkms -v $KERNEL -k $(uname -r) --force -j 2  

GRUB 配置

解释: i915.max_vfs=7 表示最多虚拟成 7 个设备

cp -a /etc/default/grub{,.bak}  
sed -i '/^GRUB_CMDLINE_LINUX_DEFAULT/c\GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt i915.enable_guc=3 i915.max_vfs=7"' /etc/default/grub  
update-grub  
update-initramfs -u -k all

工具软件安装

apt install sysfsutils -y

运行以下命令,查看/确认显卡所在的 PCIe 总线。通常是 00:02.0

lspci | grep VGA

运行以下命令, 如果 PCIe 总线编号不一致, 需要修改。

echo "devices/pci0000:00/0000:00:02.0/sriov_numvfs = 2" >> /etc/sysfs.conf  
cat /etc/sysfs.conf

重启

reboot

此处结果应该从 1 条变成 3 条 (新增 2 个虚拟集显/显卡)

lspci | grep VGA

会显示次要 PCIe ID 1-2

dmesg | grep i915